//
//  ViewController.swift
//  图像的优化
//
//  Created by Summer on 2017/12/12.
//  Copyright © 2017年 Summer. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let rect = CGRect(x: 0, y: 0, width: 200, height: 200)
        let iv = UIImageView(frame: rect)
        iv.center = view.center
        view.addSubview(iv)
        
        // 设置image
        // png 支持透明
        // jpg 不支持透明
        let image = UIImage(named: "Cover.jpg")

        // Color Misaligned Images 勾选上会变黄
        // iv.image = image
        
        // Color Misaligned Images 勾选上会不会变黄
        
        //
        // 当image为 jpg 图片时，avatarImage 与 iv.image = image, CPU会消耗高一点，内存会低一点
        iv.image = avatarImage(image: image!, size: rect.size, backgroundColor: view.backgroundColor)
    }

    // 重点：
    // 当模拟器的Debug下的 Color Misaligned Images勾选上运行程序，图片不变黄说明OK
    func avatarImage(image: UIImage, size: CGSize, backgroundColor: UIColor?) -> UIImage? {
        
        let rect = CGRect(origin: CGPoint(), size: size)
        
        // 1.图像的上下文（在内存中开辟一个地址，跟屏幕无关）
        
        /*
         参数
         1: 绘制的尺寸
         2: 不透明 （false 透明 / true 不透明）
            当有圆内切时，需要设置为true，然后设置四个角背景颜色与父视图背景颜色一致即可
         3: scale，屏幕分辨率，默认生成的图像默认使用1.0的分辨率，图像质量不好
            可以指定为0，会选择当前屏幕的分辨率
         */
        UIGraphicsBeginImageContextWithOptions(size, true, 0)
        
        // 0>背景填充
        // set()        既设置填充又设置边线
        // setFill()    只设置填充
        backgroundColor?.setFill()
        // 整个矩形填充
        UIRectFill(rect)
        
        // 1>实例化一个圆形的路径
        let path = UIBezierPath(ovalIn: rect)
        // 2>进行路径裁切 下面步骤的绘图，都会在圆形路径内部绘图，外部的全部干掉
        path.addClip()
        
        // 2.绘图
        // draw(in: rect) 在指定区域内拉伸屏幕
        image.draw(in: rect)
        
        // 绘制内切的圆形
        UIColor.darkGray.setStroke()    // 设置颜色
        path.lineWidth = 2              // 加粗边线
        path.stroke()                   // 绘制边线
        
        // 3.取得结果
        let result = UIGraphicsGetImageFromCurrentImageContext()
        
        // 4.关闭上下文
        UIGraphicsEndImageContext()
        
        // 5.返回结果
        return result
    }


}

